/**
 * 
 */
package com.enjoyor.soa.traffic.api.service.dubbo.idcs;

import java.util.List;

import com.enjoyor.soa.traffic.api.dto.idcs.ControlVehicleDto;
import com.enjoyor.soa.traffic.api.dto.idcs.RltControlBayonetDto;
import com.enjoyor.soa.traffic.util.pojo.Page;
import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

/**
 * 布控信息服务
 * 
 * @author ly
 * @date 2017-11-7
 */

public interface DubboControlVehicleService {
	/**
	 * 获取布控信息列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlIds
	 *            布控车辆编号
	 * @param vehiclePlate
	 *            号牌号码
	 * @param plateType
	 *            号牌类型
	 * @param ControlType
	 *            布控类型
	 * @param vehicleType
	 *            车辆类型
	 * @param ControlStatus
	 *            布控状态
	 * @param controlSource
	 *            布控来源
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return List<ControlDto>
	 */
	public ResultPojo getControlList(String systemKey, String token, List<String> controlIds, String vehiclePlate,
			String plateType, String controlType, String vehicleType, String controlStatus, String controlSource,
			int isLike);

	/**
	 * 获取布控信息分页列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlIds
	 *            布控车辆编号
	 * @param vehiclePlate
	 *            号牌号码
	 * @param plateType
	 *            号牌类型
	 * @param plateColor
	 *            号牌颜色
	 * @param ControlType
	 *            布控类型
	 * @param vehicleType
	 *            车辆类型
	 * @param ControlStatus
	 *            布控状态
	 * @param dataSource
	 *            数据来源
	 * @param controlSource
	 *            布控来源
	 * @param controlLevel
	 *            布控等级
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @param page
	 *            分页
	 * @return Page<ControlDto>
	 */
	public ResultPojo getControlPage(String systemKey, String token, List<String> controlIds, String vehiclePlate,
			String plateType, String plateColor, String controlType, String vehicleType, String controlStatus,
			String dataSource, String controlSource, String controlLevel, int isLike,
			@SuppressWarnings("rawtypes") Page page);

	/**
	 * 新增布控信息
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param control
	 *            布控信息
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return String 新增布控编号
	 */
	public ResultPojo insertControl(String systemKey, String token, ControlVehicleDto control, int isLike);

	/**
	 * 大数据添加布控车辆
	 * 
	 * @param systemKey
	 * @param token
	 * @param vehicle_plate 车辆类型
	 * @param vehicle_plate_type 号牌类型
	 * @param vehicle_plate_color 号牌颜色
	 * @param vehicle_type 车辆类型
	 * @param vehicle_color 车身颜色
	 * @param control_type 布控类型
	 * @param control_level 布控等级（默认三级）
	 * @param control_reason 布控类型
	 * @param begin_time 开始时间
	 * @param end_time 结束时间
	 * @return
	 */
	public ResultPojo insertControlForBD(String systemKey, String token, String vehicle_plate,
			String vehicle_plate_type, String vehicle_plate_color, String vehicle_type, String vehicle_color,
			String control_type, String control_level, String control_reason, String begin_time, String end_time);

	/**
	 * 批量新增布控信息
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlList
	 *            布控信息列表
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return String 新增布控编号，‘，’隔开
	 */
	public ResultPojo insertControlList(String systemKey, String token, List<ControlVehicleDto> controlList,
			int isLike);

	/**
	 * 更新布控信息
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param control
	 *            布控信息
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return String 更新布控编号
	 */
	public ResultPojo updateControl(String systemKey, String token, ControlVehicleDto control, int isLike);

	/**
	 * 批量更新布控信息
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlList
	 *            布控信息列表
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return String 更新布控信息编号，‘，’逗号隔开
	 */
	public ResultPojo updateControlList(String systemKey, String token, List<ControlVehicleDto> controlList,
			int isLike);

	/**
	 * 删除布控信息
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlId
	 *            布控信息编号
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return String 删除的布控信息编号
	 */
	public ResultPojo deleteControl(String systemKey, String token, String controlId, int isLike);

	/**
	 * 批量删除布控信息
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlIds
	 *            布控信息编号列表
	 * @param isLike
	 *            是否模糊车辆，0否，1是，查询不同表，必填
	 * @return String 删除布控信息编号，‘，’逗号隔开
	 * 
	 */
	public ResultPojo deleteControlList(String systemKey, String token, List<String> controlIds, int isLike);

	/**
	 * 获取布控车辆和卡口关联列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlIds
	 *            布控信息编号列表
	 * @return
	 */
	public ResultPojo getRltControlBayonetList(String systemKey, String token, List<String> controlIds);

	/**
	 * 新增布控和卡口关联
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlId
	 *            布控编号
	 * @param bayonetIds
	 *            卡口点位编号列表
	 * @return String 新增的关联编号，‘，’隔开
	 */
	public ResultPojo insertRltControlBayonet(String systemKey, String token, List<RltControlBayonetDto> list);

	/**
	 * 删除布控信息和卡口关联
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlId
	 *            布控编号
	 * @return String 删除布控编号
	 */
	public ResultPojo deleteRltControlBayonet(String systemKey, String token, String controlId);

	/**
	 * 根据统计类型统计布控车辆数量
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param countType
	 *            统计类型
	 * @return Map<String,Object>
	 */
	public ResultPojo getControlCount(String systemKey, String token, String countType);

	/**
	 * 批量布控或撤控
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param controlFlag
	 *            1.批量布撤控 2.批量布控 3.批量撤控
	 * @param controlIds
	 *            布控id列表
	 * @param controlType
	 *            布控类型
	 * @param plateType
	 *            号牌类型
	 * @param vehicleType
	 *            车辆类型
	 * @param plateColor
	 *            号牌颜色
	 * @param controlSources
	 *            布控来源
	 * @param controlLevel
	 *            布控等级
	 * @param dataSources
	 *            数据来源
	 * @return
	 */
	public ResultPojo batchControl(String systemKey, String token, String dealPerson, String dealPersonName,
			String dealDeptId, String dealDeptName, String controlFlag, List<String> controlIds,
			List<String> controlTypes, List<String> plateTypes, List<String> vehicleTypes, List<String> plateColors,
			List<String> controlSources, List<String> controlLevels, List<String> dataSources);

	/**
	 * 修改锁定状态
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param isLock
	 *            是否锁定
	 * @param controlId
	 *            布控车辆编号
	 * @return
	 */
	public ResultPojo updateControlLock(String systemKey, String token, int isLock, String controlId);

	/**
	 * 获取多条件布控车辆列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * 
	 * @param token
	 *            系统令牌
	 * @param vehiclePlate
	 *            车牌号
	 * @param controlStatus
	 *            布控状态
	 * @param vehicleTypes
	 *            车辆类型
	 * @param plateTypes
	 *            号牌类型
	 * @param plateColors
	 *            号牌颜色
	 * @param controlTypes
	 *            布控类型
	 * @param controlSources
	 *            布控来源
	 * @param controlLevels
	 *            布控等级
	 * @param dataSources
	 *            数据来源
	 * @param page
	 * @return
	 */
	public ResultPojo getMultipleControlPage(String systemKey, String token, String vehiclePlate,
			List<String> controlStatus, List<String> vehicleTypes, List<String> plateTypes, List<String> plateColors,
			List<String> controlTypes, List<String> controlSources, List<String> controlLevels,
			List<String> dataSources, List<String> overtimeTypes, @SuppressWarnings("rawtypes") Page page);

	/**
	 * 根据条件获取布撤控的列表
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 * @param vehiclePlate
	 *            号牌号码
	 * @param controlStatus
	 *            布控状态
	 * @param controIds
	 *            布控编号
	 * @param vehicleTypes
	 *            车辆类型
	 * @param plateTypes
	 *            号牌类型
	 * @param plateColors
	 *            号牌颜色
	 * @param controlTypes
	 *            布控类型
	 * @param controlSources
	 *            布控来源
	 * @param controlLevels
	 *            布控等级
	 * @param dataSources
	 *            数据来源
	 * @return
	 */
	public ResultPojo getBatchControlList(String systemKey, String token, String vehiclePlate, String controlStatus,
			List<String> controIds, List<String> vehicleTypes, List<String> plateTypes, List<String> plateColors,
			List<String> controlTypes, List<String> controlSources, List<String> controlLevels,
			List<String> dataSources);

	/**
	 * 获取批量布撤控的消息
	 * 
	 * @return
	 */
	public ResultPojo getBatchControlMessage();

	/**
	 * 批量更新布控时间
	 * 
	 * @param systemKey
	 *            系统秘钥
	 * @param token
	 *            系统令牌
	 * @param vehiclePlate
	 *            车牌号
	 * @param controlStatus
	 *            布控状态
	 * @param controlIds
	 *            布控id列表
	 * @param controlType
	 *            布控类型
	 * @param plateType
	 *            号牌类型
	 * @param vehicleType
	 *            车辆类型
	 * @param plateColor
	 *            号牌颜色
	 * @param controlSources
	 *            布控来源
	 * @param controlLevel
	 *            布控等级
	 * @param dataSources
	 *            数据来源
	 * @param beginTime
	 *            开始时间
	 * @param endTime
	 *            结束时间
	 * @return
	 */
	public ResultPojo batchControlTime(String systemKey, String token, String dealPerson, String dealPersonName,
			String dealDeptId, String dealDeptName, String vehiclePlate, List<String> controlStatus,
			List<String> controlIds, List<String> controlTypes, List<String> plateTypes, List<String> vehicleTypes,
			List<String> plateColors, List<String> controlSources, List<String> controlLevels, List<String> dataSources,
			List<String> overtimeTypes, String beginTime, String endTime);

	/**
	 * 批量新增布控车辆
	 * 
	 * @param list
	 *            需要新增的布控车辆列表
	 * @return
	 */
	public ResultPojo insertControlVehicleList(List<ControlVehicleDto> list);

	/**
	 * 批量更新布控车辆
	 * 
	 * @param list
	 *            需要更新的布控车辆列表
	 * @return
	 */
	public ResultPojo updateControlVehicleList(List<ControlVehicleDto> list);

	/**
	 * 批量删除布控车辆
	 * 
	 * @param list
	 *            需要删除的布控车辆列表
	 * @return
	 */
	public ResultPojo deleteControlVehicleList(List<String> controlIds);

	/**
	 * 获取布控名单最近更新时间
	 * 
	 * @param listDataSources
	 * @return
	 */
	public ResultPojo getMaxUpdate(String systemKey, String token, List<String> listDataSources);
}
